bitkeeper revision 1.5 (3deb3561debeVs9JS03j-s4TrTupDQ)
authorkaf24@plym.cl.cam.ac.uk <kaf24@plym.cl.cam.ac.uk>
Mon, 2 Dec 2002 10:26:41 +0000 (10:26 +0000)
committerkaf24@plym.cl.cam.ac.uk <kaf24@plym.cl.cam.ac.uk>
Mon, 2 Dec 2002 10:26:41 +0000 (10:26 +0000)
hypervisor.h, hypervisor-if.h:
  Rationalise shared headers
.del-network.h~8d81c314a6f640c7:
  Delete: xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/network.h
.del-hypervisor-if.h~84873ad1c6355e9c:
  Delete: xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/hypervisor-if.h
.del-block.h~60136f987cd3e137:
  Delete: xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/block.h

.rootkeys
BitKeeper/etc/logging_ok
xen-2.4.16/include/hypervisor-ifs/hypervisor-if.h
xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/block.h [deleted file]
xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/hypervisor-if.h [deleted file]
xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/network.h [deleted file]
xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h

index feb26f56e2f6021ab640af50dc085000d13da64e..7e725f25c3363c2dca85af5f453c1d4a65a52224 100644 (file)
--- a/.rootkeys
+++ b/.rootkeys
 3ddb79batzR40ZFY9dvgs5f1aM9I6g xenolinux-2.4.16-sparse/include/asm-xeno/hdreg.h
 3ddb79b90xBgbeYgCcImS2ZxJakxBA xenolinux-2.4.16-sparse/include/asm-xeno/highmem.h
 3ddb79baXLZV3dUKQI2gIYpAy67RuA xenolinux-2.4.16-sparse/include/asm-xeno/hw_irq.h
-3ddb79b82xfEY3yBet-2FXY4p8b7yg xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/block.h
-3ddb79b8KUSolAgH19qEzo1Ey0f1Ng xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/hypervisor-if.h
-3ddb79b8J0Y2UA8NKoN5Ng71WFQRIg xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/network.h
 3ddb79bapQ9Z9ewa5O1pqAVaNBTazg xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor.h
 3ddb79baL-pjPI8hg5xjPgd4__SlOA xenolinux-2.4.16-sparse/include/asm-xeno/i387.h
 3ddb79ba66TwvG7HpbBo04fRhmj3KQ xenolinux-2.4.16-sparse/include/asm-xeno/ide.h
index 05edeace5b85161e076f361bb16ee6276406d56a..afc0ddebd9af1398ad11571c0995ebd4c2746db3 100644 (file)
@@ -1,2 +1,3 @@
 akw27@boulderdash.cl.cam.ac.uk
+kaf24@plym.cl.cam.ac.uk
 smh22@boulderdash.cl.cam.ac.uk
index 22765150f51853c4924a1a33c40340e1732ed543..2491557325990814aea4b9a058d39f58dc1063b9 100644 (file)
@@ -4,8 +4,8 @@
  * Interface to Xeno hypervisor.
  */
 
-#include <hypervisor-ifs/network.h>
-#include <hypervisor-ifs/block.h>
+#include "network.h"
+#include "block.h"
 
 #ifndef __HYPERVISOR_IF_H__
 #define __HYPERVISOR_IF_H__
@@ -44,127 +44,6 @@ typedef struct
 #define TRAP_INSTR "int $0x82"
 
 
-static inline int HYPERVISOR_set_trap_table(trap_info_t *table)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_trap_table),
-        "b" (table) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_pt_update(page_update_request_t *req, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_pt_update), 
-        "b" (req), "c" (count) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_console_write(const char *str, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_console_write), 
-        "b" (str), "c" (count) );
-
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_pagetable(unsigned long ptr)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_pagetable),
-        "b" (ptr) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_guest_stack(
-    unsigned long ss, unsigned long esp)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_guest_stack),
-        "b" (ss), "c" (esp) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_net_update(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_net_update) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_fpu_taskswitch(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_yield(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_yield) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_exit(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_exit) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_dom0_op(void *dom0_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_dom0_op),
-        "b" (dom0_op) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_network_op(void *network_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_network_op),
-        "b" (network_op) );
-
-    return ret;
-}
-
 /* Events that a guest OS may receive from the hypervisor. */
 #define EVENT_NET_TX  0x01 /* packets for transmission. */
 #define EVENT_NET_RX  0x02 /* empty buffers for receive. */
diff --git a/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/block.h b/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/block.h
deleted file mode 100644 (file)
index 55f7a33..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/******************************************************************************
- * block.h
- *
- * Block IO communication rings.
- *
- * These are the ring data structures for buffering messages between 
- * the hypervisor and guestos's.  
- *
- * For now we'll start with our own rings for the block IO code instead
- * of using the network rings.  Hopefully, this will give us additional
- * flexibility in the future should we choose to move away from a 
- * ring producer consumer communication model.
- */
-
-#ifndef __BLOCK_H__
-#define __BLOCK_H__
-
-typedef struct blk_tx_entry_st {
-       unsigned long addr; /* virtual address */
-       unsigned long size; /* in bytes */
-} blk_tx_entry_t;
-
-typedef struct blk_rx_entry_st {
-       unsigned long addr; /* virtual address */
-       unsigned long size; /* in bytes */
-} blk_rx_entry_t;
-
-typedef struct blk_ring_st {
-       blk_tx_entry_t  *tx_ring;
-       unsigned int    tx_prod, tx_cons, tx_event;
-       unsigned int    tx_ring_size;
-
-       blk_rx_entry_t  *rx_ring;
-       unsigned int    rx_prod, rx_cons, rx_event;
-       unsigned int    rx_ring_size;
-} blk_ring_t;
-
-int blk_create_ring(int domain, unsigned long ptr);
-
-#endif
diff --git a/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/hypervisor-if.h b/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/hypervisor-if.h
deleted file mode 100644 (file)
index 6001149..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/******************************************************************************
- * hypervisor-if.h
- * 
- * Interface to Xeno hypervisor.
- */
-
-#include <asm/hypervisor-ifs/network.h>
-#include <asm/hypervisor-ifs/block.h>
-
-#ifndef __HYPERVISOR_IF_H__
-#define __HYPERVISOR_IF_H__
-
-typedef struct trap_info_st
-{
-    unsigned char  vector;  /* exception/interrupt vector */
-    unsigned char  dpl;     /* privilege level            */
-    unsigned short cs;      /* code selector              */
-    unsigned long  address; /* code address               */
-} trap_info_t;
-
-
-typedef struct
-{
-#define PGREQ_ADD_BASEPTR    0
-#define PGREQ_REMOVE_BASEPTR 1
-    unsigned long ptr, val; /* *ptr = val */
-} page_update_request_t;
-
-
-/* EAX = vector; EBX, ECX, EDX, ESI, EDI = args 1, 2, 3, 4, 5. */
-
-#define __HYPERVISOR_set_trap_table  0
-#define __HYPERVISOR_pt_update       1
-#define __HYPERVISOR_console_write   2
-#define __HYPERVISOR_set_pagetable   3
-#define __HYPERVISOR_set_guest_stack 4
-#define __HYPERVISOR_net_update      5
-#define __HYPERVISOR_fpu_taskswitch  6
-#define __HYPERVISOR_yield           7
-#define __HYPERVISOR_exit            8
-#define __HYPERVISOR_dom0_op         9
-#define __HYPERVISOR_network_op     10
-
-#define TRAP_INSTR "int $0x82"
-
-
-static inline int HYPERVISOR_set_trap_table(trap_info_t *table)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_trap_table),
-        "b" (table) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_pt_update(page_update_request_t *req, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_pt_update), 
-        "b" (req), "c" (count) );
-
-    return ret;
-}
-
-
-static inline int HYPERVISOR_console_write(const char *str, int count)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_console_write), 
-        "b" (str), "c" (count) );
-
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_pagetable(unsigned long ptr)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_pagetable),
-        "b" (ptr) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_set_guest_stack(
-    unsigned long ss, unsigned long esp)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_set_guest_stack),
-        "b" (ss), "c" (esp) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_net_update(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_net_update) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_fpu_taskswitch(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_yield(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_yield) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_exit(void)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_exit) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_dom0_op(void *dom0_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_dom0_op),
-        "b" (dom0_op) );
-
-    return ret;
-}
-
-static inline int HYPERVISOR_network_op(void *network_op)
-{
-    int ret;
-    __asm__ __volatile__ (
-        TRAP_INSTR
-        : "=a" (ret) : "0" (__HYPERVISOR_network_op),
-        "b" (network_op) );
-
-    return ret;
-}
-
-/* Events that a guest OS may receive from the hypervisor. */
-#define EVENT_NET_TX  0x01 /* packets for transmission. */
-#define EVENT_NET_RX  0x02 /* empty buffers for receive. */
-#define EVENT_TIMER   0x04 /* a timeout has been updated. */
-#define EVENT_DIE     0x08 /* OS is about to be killed. Clean up please! */
-#define EVENT_BLK_TX  0x10 /* packets for transmission. */
-#define EVENT_BLK_RX  0x20 /* empty buffers for receive. */
-
-/* Bit offsets, as opposed to the above masks. */
-#define _EVENT_NET_TX 0
-#define _EVENT_NET_RX 1
-#define _EVENT_TIMER  2
-#define _EVENT_DIE    3
-#define _EVENT_BLK_TX 4
-#define _EVENT_BLK_RX 5
-
-/*
- * NB. We expect that this struct is smaller than a page.
- */
-typedef struct shared_info_st {
-
-    /* Bitmask of outstanding event notifications hypervisor -> guest OS. */
-    unsigned long events;
-    /*
-     * Hypervisor will only signal event delivery via the "callback
-     * exception" when this value is non-zero. Hypervisor clears this when
-     * notiying the guest OS -- thsi prevents unbounded reentrancy and
-     * stack overflow (in this way, acts as an interrupt-enable flag).
-     */
-    unsigned long events_enable;
-
-    /*
-     * Address for callbacks hypervisor -> guest OS.
-     * Stack frame looks like that of an interrupt.
-     * Code segment is the default flat selector.
-     * This handler will only be called when events_enable is non-zero.
-     */
-    unsigned long event_address;
-
-    /*
-     * Hypervisor uses this callback when it takes a fault on behalf of
-     * an application. This can happen when returning from interrupts for
-     * example: various faults can occur when reloading the segment
-     * registers, and executing 'iret'.
-     * This callback is provided with an extended stack frame, augmented
-     * with saved values for segment registers %ds and %es:
-     *  %ds, %es, %eip, %cs, %eflags [, %oldesp, %oldss]
-     * Code segment is the default flat selector.
-     * FAULTS WHEN CALLING THIS HANDLER WILL TERMINATE THE DOMAIN!!!
-     */
-    unsigned long failsafe_address;
-
-    /*
-     * CPU ticks since start of day.
-     * `wall_time' counts CPU ticks in real time.
-     * `domain_time' counts CPU ticks during which this domain has run.
-     */
-    unsigned long ticks_per_ms; /* CPU ticks per millisecond */
-    /*
-     * Current wall_time can be found by rdtsc. Only possible use of
-     * variable below is that it provides a timestamp for last update
-     * of domain_time.
-     */
-    unsigned long long wall_time;
-    unsigned long long domain_time;
-
-    /*
-     * Timeouts for points at which guest OS would like a callback.
-     * This will probably be backed up by a timer heap in the guest OS.
-     * In Linux we use timeouts to update 'jiffies'.
-     */
-    unsigned long long wall_timeout;
-    unsigned long long domain_timeout;
-
-    /*
-     * Real-Time Clock. This shows time, in seconds, since 1.1.1980.
-     * The timestamp shows the CPU 'wall time' when RTC was last read.
-     * Thus it allows a mapping between 'real time' and 'wall time'.
-     */
-    unsigned long      rtc_time;
-    unsigned long long rtc_timestamp;
-
-} shared_info_t;
-
-/*
- * NB. We expect that this struct is smaller than a page.
- */
-typedef struct start_info_st {
-    unsigned long nr_pages;       /* total pages allocated to this domain */
-    shared_info_t *shared_info;   /* start address of shared info struct */
-    unsigned long  pt_base;       /* address of page directory */
-    unsigned long phys_base;
-    unsigned long mod_start;      /* start address of pre-loaded module */
-    unsigned long mod_len;        /* size (bytes) of pre-loaded module */
-    net_ring_t *net_rings;
-    int num_net_rings;
-    blk_ring_t *blk_ring;         /* block io communication rings */
-    unsigned long frame_table;    /* mapping of the frame_table for dom0 */
-    unsigned char cmd_line[1];    /* variable-length */
-} start_info_t;
-
-/* For use in guest OSes. */
-extern shared_info_t *HYPERVISOR_shared_info;
-
-#endif /* __HYPERVISOR_IF_H__ */
diff --git a/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/network.h b/xenolinux-2.4.16-sparse/include/asm-xeno/hypervisor-ifs/network.h
deleted file mode 100644 (file)
index 54cb990..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/******************************************************************************
- * network.h
- *
- * ring data structures for buffering messages between hypervisor and
- * guestos's.  As it stands this is only used for network buffer exchange.
- *
- * This file also contains structures and interfaces for the per-domain
- * routing/filtering tables in the hypervisor.
- *
- */
-
-#ifndef __RING_H__
-#define __RING_H__
-
-#include <linux/types.h>
-
-typedef struct tx_entry_st {
-       unsigned long addr; /* virtual address */
-       unsigned long size; /* in bytes */
-} tx_entry_t;
-
-typedef struct rx_entry_st {
-       unsigned long addr; /* virtual address */
-       unsigned long size; /* in bytes */
-} rx_entry_t;
-
-#define TX_RING_SIZE 1024
-#define RX_RING_SIZE 1024
-typedef struct net_ring_st {
-    /*
-     * Guest OS places packets into ring at tx_prod.
-     * Hypervisor removes at tx_cons.
-     * Ring is empty when tx_prod == tx_cons.
-     * Guest OS receives a DOMAIN_EVENT_NET_TX when tx_cons passes tx_event.
-     * Hypervisor may be prodded whenever tx_prod is updated, but this is
-     * only necessary when tx_cons == old_tx_prod (ie. transmitter stalled).
-     */
-    tx_entry_t *tx_ring;
-    unsigned int tx_prod, tx_cons, tx_event;
-    unsigned int tx_ring_size;
-    /*
-     * Guest OS places empty buffers into ring at rx_prod.
-     * Hypervisor fills buffers as rx_cons.
-     * Ring is empty when rx_prod == rx_cons.
-     * Guest OS receives a DOMAIN_EVENT_NET_RX when rx_cons passes rx_event.
-     * Hypervisor may be prodded whenever rx_prod is updated, but this is
-     * only necessary when rx_cons == old_rx_prod (ie. receiver stalled).
-     */
-    rx_entry_t *rx_ring;
-    unsigned int rx_prod, rx_cons, rx_event;
-    unsigned int rx_ring_size;
-} net_ring_t;
-
-/* Specify base of per-domain array. Get returned free slot in the array. */
-net_ring_t *create_net_vif(int domain);
-
-/* Packet routing/filtering code follows:
- */
-
-#define NETWORK_ACTION_ACCEPT   0
-#define NETWORK_ACTION_COUNT    1
-
-#define NETWORK_PROTO_IP        0
-#define NETWORK_PROTO_TCP       1
-#define NETWORK_PROTO_UDP       2
-#define NETWORK_PROTO_ARP       3
-
-typedef struct net_rule_st 
-{
-    u32  src_addr;
-    u32  dst_addr;
-    u16  src_port;
-    u16  dst_port;
-    u32  src_addr_mask;
-    u32  dst_addr_mask;
-    u16  src_port_mask;
-    u16  dst_port_mask;
-    u16  proto;
-    
-    u16  src_interface;
-    u16 dst_interface;
-    u16  action;
-} net_rule_t;
-
-/* Network trap operations and associated structure. 
- * This presently just handles rule insertion and deletion, but will
- * evenually have code to add and remove interfaces.
- */
-
-#define NETWORK_OP_ADDRULE      0
-#define NETWORK_OP_DELETERULE   1
-#define NETWORK_OP_GETRULELIST  2
-
-typedef struct network_op_st 
-{
-    unsigned long cmd;
-    union
-    {
-        net_rule_t net_rule;
-    }
-    u;
-} network_op_t;
-
-typedef struct net_rule_ent_st
-{
-    net_rule_t r;
-    struct net_rule_ent_st *next;
-} net_rule_ent_t;
-
-/* Drop a new rule down to the network tables. */
-int add_net_rule(net_rule_t *rule);
-
-#endif
index 62f5b6d0235c9761501bd0c17c7f04a9a590ee40..522f124e86336bb2c7b3ba5d55fdd370ec7bc983 100644 (file)
@@ -37,4 +37,130 @@ void queue_tlb_flush(void);
 void queue_tlb_flush_one(unsigned long ptr);
 void flush_page_update_queue(void);
 
+
+/*
+ * Assembler stubs for hyper-calls.
+ */
+
+static inline int HYPERVISOR_set_trap_table(trap_info_t *table)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_set_trap_table),
+        "b" (table) );
+
+    return ret;
+}
+
+
+static inline int HYPERVISOR_pt_update(page_update_request_t *req, int count)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_pt_update), 
+        "b" (req), "c" (count) );
+
+    return ret;
+}
+
+
+static inline int HYPERVISOR_console_write(const char *str, int count)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_console_write), 
+        "b" (str), "c" (count) );
+
+
+    return ret;
+}
+
+static inline int HYPERVISOR_set_pagetable(unsigned long ptr)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_set_pagetable),
+        "b" (ptr) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_set_guest_stack(
+    unsigned long ss, unsigned long esp)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_set_guest_stack),
+        "b" (ss), "c" (esp) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_net_update(void)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_net_update) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_fpu_taskswitch(void)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_yield(void)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_yield) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_exit(void)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_exit) );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_dom0_op(void *dom0_op)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_dom0_op),
+        "b" (dom0_op) : "memory" );
+
+    return ret;
+}
+
+static inline int HYPERVISOR_network_op(void *network_op)
+{
+    int ret;
+    __asm__ __volatile__ (
+        TRAP_INSTR
+        : "=a" (ret) : "0" (__HYPERVISOR_network_op),
+        "b" (network_op) );
+
+    return ret;
+}
+
 #endif /* __HYPERVISOR_H__ */